package com.eventos;

import java.util.Date;
import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.ExecutionException;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.eventssmartphone.JSONReader;
import com.eventssmartphone.JSONReaderListener;

import android.content.Context;
import android.text.format.DateFormat;
import android.util.Log;

import com.eventssmartphone.JSONReader;

public class GestorDetalleEvento {

	public static GestorDetalleEvento gestor = new GestorDetalleEvento();
	
	public static GestorDetalleEvento getInstance(){
		return gestor;
	}
	
	public void dameDetalleEvento(int idEvento,Context context){
		Log.i("wachu","wachu1.5");
		JSONArray jEvento;
		JSONReader readerEvento = new JSONReader();
		readerEvento.setJSONReaderListener((JSONReaderListener)context);
		Log.i("wachu","uk1");
		
		try{
			readerEvento.execute("http://200.16.7.112:3000/event_management/events/dameDetalleEvento/"+ String.valueOf(idEvento) +".json");
			//Log.i("GDE","despuesDelReader. longitud:"+readerEvento.get().length());
		}
		catch(Exception e){
			Log.i("GDE","Entro acá muy valientemente");
			e.printStackTrace();
		}
	}
	
	public DetalleEventoBean procesarDameDetalleEvento(JSONArray jEvento,int idEvento){
		
		try{
				
				Log.i("GDE","wachu1.9");
			
				String stringDate;
				Date dateDate;
				SimpleDateFormat formatoYMD = new SimpleDateFormat("yyyy-MM-dd"); 
				SimpleDateFormat formatoYMDHMS = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss-05:00");
				
				Log.i("GDE","wachu2");
				
				String stringTime;
				
				DetalleEventoBean objEvento = new DetalleEventoBean();
				objEvento.setIdEvento(idEvento);
				
				//NOMBRE
				
				String nombre=jEvento.getJSONObject(0).getString("nombre");
				if(nombre==null) nombre="Evento sin nombre";
				objEvento.setEvento(jEvento.getJSONObject(0).getString("nombre"));
				
				//TIPO
				String tipoEvento=jEvento.getJSONObject(0).getString("event_type");
				if(tipoEvento==null) tipoEvento="Evento sin tipo";
				objEvento.setTipoEvento(tipoEvento);
				
				//DESCRIPCION
				String descripcion=jEvento.getJSONObject(0).getString("descripcion");
				if(descripcion==null) descripcion="Este evento no posee descripción";
				objEvento.setDescripcion(descripcion);
				
				//FECHA INICIO - FECHA FIN
				String fInicio = jEvento.getJSONObject(0).get("fecha_inicio_venta").toString();
				String fFin = jEvento.getJSONObject(0).get("fecha_fin_venta").toString();
				
				Date dateIni;
				Date dateFin;
				
				try{
					dateIni = (Date) formatoYMD.parse(fInicio);
					dateFin = (Date) formatoYMD.parse(fFin);
				}
				catch(Exception ex){
					dateIni=null;
					dateFin=null;
					ex.printStackTrace();
				}
				objEvento.setFechaInicio(dateIni);
				objEvento.setFechaFin(dateFin);
				
				if((jEvento.getJSONObject(0)).getString("ambiente") == "null"){
					Log.i("aviso1","entro Aca 1");
					objEvento.setAmbiente("Este evento no se realiza en un ambiente");
				}
				else{
					Log.i("GestorDetalleEvento","entro Aca!!!!");
					String nomAmbiente =((jEvento.getJSONObject(0)).getJSONObject("ambiente")).getString("nombre");
					if (nomAmbiente==null) nomAmbiente = "Este evento no se realiza en un ambiente";
					objEvento.setAmbiente(nomAmbiente);
				}

				
				//IMAGEN
				String imagen = jEvento.getJSONObject(0).getString("imagen_publicitaria");
				if(imagen==null) objEvento.setUrlImagen(null);
				else objEvento.setUrlImagen("http://" +imagen);
			
				ArrayList<HorarioBean> listaHorarios = new ArrayList<HorarioBean>();
				HorarioBean horario;
				
				
				
				if((jEvento.getJSONObject(0)).getString("horarios") == "null"){
					objEvento.setHorarios(null);
				}
				else{
				
					String cadFechaEvento;
					String cadHoraInicioEvento;
					String cadHoraFinEvento;
					Date dateFechaEvento;
					Date dateHoraInicioEvento;
					Date dateHoraFinEvento;
					int dia;
					
					JSONArray jarray =((jEvento.getJSONObject(0)).getJSONArray("horarios"));
				
					for(int i=0;i < jarray.length();i++){
						
						horario=new HorarioBean();
						
						cadFechaEvento = jarray.getJSONObject(i).get("fecha").toString();
						cadHoraInicioEvento = jarray.getJSONObject(i).get("hora_inicio").toString();
						cadHoraFinEvento = jarray.getJSONObject(i).get("hora_fin").toString();
						
						try{
							dateFechaEvento = (Date) formatoYMD.parse(cadFechaEvento);
							Log.i("PARSINGA", cadHoraInicioEvento);
							dateHoraInicioEvento = (Date) formatoYMDHMS.parse(cadHoraInicioEvento);
							dateHoraFinEvento = (Date) formatoYMDHMS.parse(cadHoraFinEvento);
							dia=dateFechaEvento.getDay();
						}
						catch(Exception e){
							dateFechaEvento=null;
							dateHoraInicioEvento=null;
							dateHoraFinEvento=null;
							dia=-1;
							e.printStackTrace();
						}
						
						horario.setFecha(dateFechaEvento);
						horario.setHora_ini(dateHoraInicioEvento);
						horario.setHora_fin(dateHoraFinEvento);
						horario.setDia(dia);
						
						listaHorarios.add(horario);
					}
					
					objEvento.setHorarios(listaHorarios);
					
				}
				
				if((jEvento.getJSONObject(0)).getString("servicios") == "null"){
					//Log.i("aviso1","entro Aca 1");
					objEvento.setServicios(null);
				}
				else{
				
					JSONArray jarray =((jEvento.getJSONObject(0)).getJSONArray("servicios"));
					
					ArrayList<ServicioBean> listaServicios = new ArrayList<ServicioBean>();
					ServicioBean servicio;
					String nomServicio;
					
					if(jarray.length()==0){
						listaServicios=null;
					}
					else{
					
						for(int i=0;i < jarray.length();i++){
							servicio=new ServicioBean();
							
							nomServicio=jarray.getJSONObject(i).get("nombre").toString();
							if(nomServicio==null) nomServicio="";
							servicio.setNombre(nomServicio);
							
							listaServicios.add(servicio);
						}
					}
					
					objEvento.setServicios(listaServicios);
				}
				
				//PUNTAJE
				String cadPuntaje;
				double numPuntaje;
				
				cadPuntaje=jEvento.getJSONObject(0).getString("rating");
				try{
					numPuntaje=Double.parseDouble(cadPuntaje);
				}
				catch(Exception e){
					numPuntaje=-1;
					e.printStackTrace();
				}
				objEvento.setRating(numPuntaje);
								
				
			return objEvento;
		}catch(JSONException e){
			
			e.printStackTrace();
			return null;
		}
	}
	
	
	
}
